<template>
    <a-modal
            :title="title"
            :width="800"
            :visible="visible"
            :confirmLoading="confirmLoading"
            switchFullscreen
            @ok="handleOk"
            @cancel="handleCancel"
            cancelText="关闭">
        <a-spin :spinning="confirmLoading">
            <a-form-model ref="form" :model="model" :rules="validatorRules">
                <a-row>
<#list columnList as po><#rt/>
<#if po.javaName !='id' && po.javaName !='delFlag'&& po.javaName !='createBy' && po.javaName !='createName'
&& po.javaName !='createTime' && po.javaName !='updateBy'  && po.javaName !='updateName'  && po.javaName !='updateTime'
&& po.javaName !='deptCode'  && po.javaName !='deptName' && po.javaName !='processInstanceId' && po.javaName !='auditStatus'
&& po.javaName !='auditTime' && po.javaName !='submit' && po.genFlag == 1><#rt/>
                    <a-col :span="span">
                        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="${po.javaName}" label="${po.desc}">
<#if po.javaType =='Date'>
                            <a-date-picker format="YYYY-MM-DD HH:mm:ss"
                                           style="width: 100%"
                                           valueFormat="YYYY-MM-DD HH:mm:ss"
                                           :show-time="{ defaultValue: moment('00:00:00', 'HH:mm:ss') }"
                                           :getCalendarContainer="(triggerNode) => triggerNode.parentNode" v-model="model.${po.javaName}"/>
<#elseif po.javaType =='datetime'>
                            <a-date-picker showTime valueFormat='YYYY-MM-DD HH:mm:ss' v-model="model.${po.javaName}" />
<#elseif "Integer,BigDecimal,"?contains(po.javaType)>
                            <a-input type="number" v-model="model.${po.javaName}"/>
<#elseif po.desc?contains('数据字典')>
                            <a-select allowClear :getPopupContainer="(trigger) => trigger.parentNode" v-model="model.${po.javaName}">
                                <a-select-option v-for="(item, index) in items_${dbName}_${po.name}" :key="item.itemId">
                                    {{ item.itemText }}
                                </a-select-option>
                            </a-select>
<#else>
                            <a-input placeholder="请输入${po.desc}" v-model="model.${po.javaName}" />
</#if>
                        </a-form-model-item>
                    </a-col>
</#if>
</#list>
                </a-row>
            </a-form-model>
        </a-spin>
    </a-modal>
</template>

<script>
    import { httpAction, getItemsByDictCodes } from '@/api/manage'
    import moment from "moment"

    const dictCodeList = [
<#list columnList as po>
<#if po.desc?contains('数据字典')>
        '${dbName}_${po.name}',
</#if>
</#list>
    ]

    export default {
        name: "${javaNameBig}Modal",
        data () {
            return {
                title:"操作",
                visible: false,
                model: {},
                span: 24,
                labelCol: {
                    xs: { span: 24 },
                    sm: { span: 5 },
                },
                wrapperCol: {
                    xs: { span: 24 },
                    sm: { span: 16 },
                },
<#list columnList as po>
<#if po.desc?contains('数据字典')>
                items_${dbName}_${po.name}: [],
</#if>
</#list>
                confirmLoading: false,
                validatorRules:{
<#list columnList as po>
<#if po.javaName !='id' && po.javaName !='delFlag'&& po.javaName !='createBy' && po.javaName !='createName'
&& po.javaName !='createTime' && po.javaName !='updateBy'  && po.javaName !='updateName'  && po.javaName !='updateTime'
&& po.javaName !='deptCode'  && po.javaName !='deptName' && po.javaName !='processInstanceId' && po.javaName !='auditStatus'
&& po.javaName !='auditTime' && po.javaName !='submit' && po.genFlag == 1>
                    ${po.javaName}:[{ required: true, message: '请输入${po.desc}!' <#if po.validatorReg??>,validator: ${po.javaName}Validator</#if>}],
</#if>
</#list>
                },
                url: {
                    add: "/gateway/${projectName}/${javaName?lower_case}/add",
                    edit: "/gateway/${projectName}/${javaName?lower_case}/edit",
                },
            }
        },
        created () {
            this.itemsList(dictCodeList);
        },
        methods: {
            moment,
            add () {
                //初始化默认值
                this.edit({});
            },
            edit (record) {
                this.model = Object.assign({}, record);
                this.visible = true;
            },
            close () {
                this.$emit('close');
                this.visible = false;
                this.$refs.form.clearValidate();
            },
            handleOk () {
                const that = this;
                // 触发表单验证
                this.$refs.form.validate(valid => {
                    if (valid) {
                        that.confirmLoading = true;
                        let httpurl = '';
                        let method = '';
                        if(!this.model.id){
                            httpurl+=this.url.add;
                            method = 'post';
                        }else{
                            httpurl+=this.url.edit;
                            method = 'post';
                        }
                        httpAction(httpurl,this.model,method).then((res)=>{
                            if(res.success){
                                that.$message.success(res.message);
                                that.$emit('ok');
                            }else{
                                that.$message.warning(res.message);
                            }
                        }).finally(() => {
                            that.confirmLoading = false;
                            that.close();
                        })
                    }else{
                        return false;
                    }
                })
            },
            handleCancel () {
                this.close()
            },
            // 字典查询
            itemsList(dictCodeList) {
                getItemsByDictCodes({
                    appId: 60055,
                    dictCodes: dictCodeList.join(','),
                }).then((res) => {
                    if (res.code == 200) {
<#list columnList as po>
<#if po.desc?contains('数据字典')>
                        this.items_${dbName}_${po.name} = res.result.${dbName}_${po.name}
</#if>
</#list>
                    }
                })
            },
<#list columnList as po>
<#if po.validatorReg?? && po.javaName !='id' && po.javaName !='delFlag'&& po.javaName !='createBy' && po.javaName !='createName'
&& po.javaName !='createTime' && po.javaName !='updateBy'  && po.javaName !='updateName'  && po.javaName !='updateTime'
&& po.javaName !='deptCode'  && po.javaName !='deptName' && po.javaName !='processInstanceId' && po.javaName !='auditStatus'
&& po.javaName !='auditTime' && po.javaName !='submit' && po.genFlag == 1>
            // ${po.desc}正则校验
            ${po.javaName}Validator(rule, value, callback){
                if (!value) {
                    callback(new Error('请输入${po.desc}!'))
                } else {
                    if (!${po.validatorReg}.test(value)) {
                        callback(new Error('${po.desc}格式不正确!'))
                    } else {
                        callback()
                    }
                }
            },
</#if>
</#list>
        }
    }
</script>

<style lang="less" scoped>

</style>